热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

语料|球员_HanLP基于朴素贝叶斯训练文本分类

篇首语:本文由编程笔记#小编为大家整理,主要介绍了HanLP基于朴素贝叶斯训练文本分类相关的知识,希望对你有一定的参考价值。一、HanLP朴素贝叶斯分类

篇首语:本文由编程笔记#小编为大家整理,主要介绍了HanLP 基于朴素贝叶斯 训练 文本分类相关的知识,希望对你有一定的参考价值。



一、HanLP 朴素贝叶斯分类器

HanLP 针对文本分类算法已经帮我们实现 朴素贝叶斯法 ,用户可以无需关心内部细节,HanLP 也提供了相关自定义训练接口,前提需要将数据集根据分类放到不同的目录中,例如:

官方给出了相关性能指标如下表所示,其中 SVM 在本专栏下篇文章进行演示:

有关于 HanLP 环境的搭建,可以参考下面这篇文章:



https://xiaobichao.blog.csdn.net/article/details/128271909



准备语料库

下面通过使用 HanLP 基于朴素贝叶斯算法,实现文本分类,语料库采用搜狗文本分类语料库迷你版测试数据集,下载数据集:



http://file.hankcs.com/corpus/sogou-text-classification-corpus-mini.zip


下载加压后可以发现该数据集已经标注好:


文本样例:


训练数据

public class ClassifyTrain
public static void main(String[] args) throws IOException
//语料库的地址
String dataPath = "F:/bigdata/hanlp/sogou-text-classification-corpus-mini/搜狗文本分类语料库迷你版";
//模型保存路径
String modelPath = "F:/bigdata/hanlp/sogou-text-classification-corpus-mini/classification-model.ser";
//训练数据
trainData(dataPath, modelPath);

private static void trainData(String dataPath, String modelPath) throws IOException
File corpusFolder = new File(dataPath);
if (!corpusFolder.exists() || !corpusFolder.isDirectory())
System.err.println("没有文本分类语料");
return;

// FileDataSet省内存,可加载大规模数据集,支持不同的ITokenizer,详见源码中的文档
// 使用前90% 的数据作为训练集
IDataSet trainingCorpus = new FileDataSet()
.setTokenizer(new HanLPTokenizer())
.load(dataPath, "UTF-8", 0.9);
// 创建朴素贝叶斯分类器
IClassifier classifier = new NaiveBayesClassifier();
// 训练数据
classifier.train(trainingCorpus);
// 获取训练模型
AbstractModel model = classifier.getModel();
// 使用后10% 的数据作为测试集
IDataSet testingCorpus = new MemoryDataSet(model)
.load(dataPath, "UTF-8", -0.1);
// 计算准确率
FMeasure result = Evaluator.evaluate(classifier, testingCorpus);
System.out.println("测试集准确度:");
System.out.println(result);
// 保存模型
IOUtil.saveObjectTo(model, modelPath);


查看训练日志:

查看训练模型:


测试模型

public class TestClassify
public static void main(String[] args)
String modelPath = "F:/bigdata/hanlp/sogou-text-classification-corpus-mini/classification-model.ser";
testModel(modelPath);

private static void testModel(String modelPath)
NaiveBayesModel model = (NaiveBayesModel) IOUtil.readObjectFrom(modelPath);
IClassifier classifier = new NaiveBayesClassifier(model);
// 测试分类
String text1 = "研究生考录模式亟待进一步专业化";
System.out.printf("《%s》 属于分类 【%s】\\n", text1, classifier.classify(text1));
String text2 = "C罗获2018环球足球奖最佳球员 德尚荣膺最佳教练";
System.out.printf("《%s》 属于分类 【%s】\\n", text2, classifier.classify(text2));
String text3 = "英国造航母耗时8年仍未服役 被中国速度远远甩在身后";
System.out.printf("《%s》 属于分类 【%s】\\n", text3, classifier.classify(text3));
String text4 = "如果真想用食物解压,建议可以食用燕麦";
System.out.printf("《%s》 属于分类 【%s】\\n", text4, classifier.classify(text4));


测试结果:


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • 本文为Codeforces 1294A题目的解析,主要讨论了Collecting Coins整除+不整除问题。文章详细介绍了题目的背景和要求,并给出了解题思路和代码实现。同时提供了在线测评地址和相关参考链接。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
author-avatar
寒宝儿_____
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有